// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::MigrationCenter].
#[async_trait::async_trait]
pub trait MigrationCenter: std::fmt::Debug + Send + Sync {
    async fn list_assets(
        &self,
        req: crate::model::ListAssetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAssetsResponse>>;

    async fn get_asset(
        &self,
        req: crate::model::GetAssetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Asset>>;

    async fn update_asset(
        &self,
        req: crate::model::UpdateAssetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Asset>>;

    async fn batch_update_assets(
        &self,
        req: crate::model::BatchUpdateAssetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::BatchUpdateAssetsResponse>>;

    async fn delete_asset(
        &self,
        req: crate::model::DeleteAssetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn batch_delete_assets(
        &self,
        req: crate::model::BatchDeleteAssetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn report_asset_frames(
        &self,
        req: crate::model::ReportAssetFramesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ReportAssetFramesResponse>>;

    async fn aggregate_assets_values(
        &self,
        req: crate::model::AggregateAssetsValuesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AggregateAssetsValuesResponse>>;

    async fn create_import_job(
        &self,
        req: crate::model::CreateImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_import_jobs(
        &self,
        req: crate::model::ListImportJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImportJobsResponse>>;

    async fn get_import_job(
        &self,
        req: crate::model::GetImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImportJob>>;

    async fn delete_import_job(
        &self,
        req: crate::model::DeleteImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_import_job(
        &self,
        req: crate::model::UpdateImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn validate_import_job(
        &self,
        req: crate::model::ValidateImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn run_import_job(
        &self,
        req: crate::model::RunImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_import_data_file(
        &self,
        req: crate::model::GetImportDataFileRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImportDataFile>>;

    async fn list_import_data_files(
        &self,
        req: crate::model::ListImportDataFilesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImportDataFilesResponse>>;

    async fn create_import_data_file(
        &self,
        req: crate::model::CreateImportDataFileRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_import_data_file(
        &self,
        req: crate::model::DeleteImportDataFileRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_groups(
        &self,
        req: crate::model::ListGroupsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupsResponse>>;

    async fn get_group(
        &self,
        req: crate::model::GetGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>>;

    async fn create_group(
        &self,
        req: crate::model::CreateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_group(
        &self,
        req: crate::model::UpdateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_group(
        &self,
        req: crate::model::DeleteGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn add_assets_to_group(
        &self,
        req: crate::model::AddAssetsToGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn remove_assets_from_group(
        &self,
        req: crate::model::RemoveAssetsFromGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_error_frames(
        &self,
        req: crate::model::ListErrorFramesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListErrorFramesResponse>>;

    async fn get_error_frame(
        &self,
        req: crate::model::GetErrorFrameRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ErrorFrame>>;

    async fn list_sources(
        &self,
        req: crate::model::ListSourcesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSourcesResponse>>;

    async fn get_source(
        &self,
        req: crate::model::GetSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Source>>;

    async fn create_source(
        &self,
        req: crate::model::CreateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_source(
        &self,
        req: crate::model::UpdateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_source(
        &self,
        req: crate::model::DeleteSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_preference_sets(
        &self,
        req: crate::model::ListPreferenceSetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPreferenceSetsResponse>>;

    async fn get_preference_set(
        &self,
        req: crate::model::GetPreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PreferenceSet>>;

    async fn create_preference_set(
        &self,
        req: crate::model::CreatePreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_preference_set(
        &self,
        req: crate::model::UpdatePreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_preference_set(
        &self,
        req: crate::model::DeletePreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_settings(
        &self,
        req: crate::model::GetSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Settings>>;

    async fn update_settings(
        &self,
        req: crate::model::UpdateSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_report_config(
        &self,
        req: crate::model::CreateReportConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_report_config(
        &self,
        req: crate::model::GetReportConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ReportConfig>>;

    async fn list_report_configs(
        &self,
        req: crate::model::ListReportConfigsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListReportConfigsResponse>>;

    async fn delete_report_config(
        &self,
        req: crate::model::DeleteReportConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_report(
        &self,
        req: crate::model::CreateReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_report(
        &self,
        req: crate::model::GetReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Report>>;

    async fn list_reports(
        &self,
        req: crate::model::ListReportsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListReportsResponse>>;

    async fn delete_report(
        &self,
        req: crate::model::DeleteReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::MigrationCenter] also implement [MigrationCenter].
#[async_trait::async_trait]
impl<T: super::MigrationCenter> MigrationCenter for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_assets(
        &self,
        req: crate::model::ListAssetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAssetsResponse>> {
        T::list_assets(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_asset(
        &self,
        req: crate::model::GetAssetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Asset>> {
        T::get_asset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_asset(
        &self,
        req: crate::model::UpdateAssetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Asset>> {
        T::update_asset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn batch_update_assets(
        &self,
        req: crate::model::BatchUpdateAssetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::BatchUpdateAssetsResponse>> {
        T::batch_update_assets(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_asset(
        &self,
        req: crate::model::DeleteAssetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_asset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn batch_delete_assets(
        &self,
        req: crate::model::BatchDeleteAssetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::batch_delete_assets(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn report_asset_frames(
        &self,
        req: crate::model::ReportAssetFramesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ReportAssetFramesResponse>> {
        T::report_asset_frames(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn aggregate_assets_values(
        &self,
        req: crate::model::AggregateAssetsValuesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AggregateAssetsValuesResponse>> {
        T::aggregate_assets_values(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_import_job(
        &self,
        req: crate::model::CreateImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_import_jobs(
        &self,
        req: crate::model::ListImportJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImportJobsResponse>> {
        T::list_import_jobs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_import_job(
        &self,
        req: crate::model::GetImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImportJob>> {
        T::get_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_import_job(
        &self,
        req: crate::model::DeleteImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_import_job(
        &self,
        req: crate::model::UpdateImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn validate_import_job(
        &self,
        req: crate::model::ValidateImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::validate_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn run_import_job(
        &self,
        req: crate::model::RunImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::run_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_import_data_file(
        &self,
        req: crate::model::GetImportDataFileRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImportDataFile>> {
        T::get_import_data_file(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_import_data_files(
        &self,
        req: crate::model::ListImportDataFilesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImportDataFilesResponse>> {
        T::list_import_data_files(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_import_data_file(
        &self,
        req: crate::model::CreateImportDataFileRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_import_data_file(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_import_data_file(
        &self,
        req: crate::model::DeleteImportDataFileRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_import_data_file(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_groups(
        &self,
        req: crate::model::ListGroupsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupsResponse>> {
        T::list_groups(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_group(
        &self,
        req: crate::model::GetGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>> {
        T::get_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_group(
        &self,
        req: crate::model::CreateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_group(
        &self,
        req: crate::model::UpdateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_group(
        &self,
        req: crate::model::DeleteGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn add_assets_to_group(
        &self,
        req: crate::model::AddAssetsToGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::add_assets_to_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn remove_assets_from_group(
        &self,
        req: crate::model::RemoveAssetsFromGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::remove_assets_from_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_error_frames(
        &self,
        req: crate::model::ListErrorFramesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListErrorFramesResponse>> {
        T::list_error_frames(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_error_frame(
        &self,
        req: crate::model::GetErrorFrameRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ErrorFrame>> {
        T::get_error_frame(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_sources(
        &self,
        req: crate::model::ListSourcesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSourcesResponse>> {
        T::list_sources(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_source(
        &self,
        req: crate::model::GetSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Source>> {
        T::get_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_source(
        &self,
        req: crate::model::CreateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_source(
        &self,
        req: crate::model::UpdateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_source(
        &self,
        req: crate::model::DeleteSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_preference_sets(
        &self,
        req: crate::model::ListPreferenceSetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPreferenceSetsResponse>> {
        T::list_preference_sets(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_preference_set(
        &self,
        req: crate::model::GetPreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PreferenceSet>> {
        T::get_preference_set(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_preference_set(
        &self,
        req: crate::model::CreatePreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_preference_set(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_preference_set(
        &self,
        req: crate::model::UpdatePreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_preference_set(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_preference_set(
        &self,
        req: crate::model::DeletePreferenceSetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_preference_set(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_settings(
        &self,
        req: crate::model::GetSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Settings>> {
        T::get_settings(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_settings(
        &self,
        req: crate::model::UpdateSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_settings(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_report_config(
        &self,
        req: crate::model::CreateReportConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_report_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_report_config(
        &self,
        req: crate::model::GetReportConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ReportConfig>> {
        T::get_report_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_report_configs(
        &self,
        req: crate::model::ListReportConfigsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListReportConfigsResponse>> {
        T::list_report_configs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_report_config(
        &self,
        req: crate::model::DeleteReportConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_report_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_report(
        &self,
        req: crate::model::CreateReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_report(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_report(
        &self,
        req: crate::model::GetReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Report>> {
        T::get_report(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_reports(
        &self,
        req: crate::model::ListReportsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListReportsResponse>> {
        T::list_reports(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_report(
        &self,
        req: crate::model::DeleteReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_report(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}
